package ModelAndController;
/*
 * A kapcsoló hálózati elemet megvalósító osztály. 
 * A kapcsoló belső állapota alapértelmezett értékkel rendelkezik, 
 * melyet a felhasználó módosítani tud, az egyetlen kimenetén 
 * a mindenkori belső állapot értékét továbbítja.
 */
//Exception 100 es 119 kozott
public class Switch extends Element{
	//A  kapcsoló belső állapotát tárolja
	private int state;
	//konstruktor
	public Switch(){
		state = 0;
	}
	//Az elem belső állapotának változását végzi a bemenetek értékének függvényében.
	//Ha az adott elem változott, akkor azt jelzi a visszatérési értéken.
	public boolean isUpdateSuccess(){
		boolean retValue = false;
		if(shouldUpdate){
			actualUpdate();
			retValue = true;
			shouldUpdate =false;
		}

		buffer = Integer.toString( state );
		return retValue;
	}
	//Kiszámolja,hogy a bemenetek alapján milyen állapotot kell felvennie és 
	//ha az állapota ezzel változik,akkor meghívja a megfelelő függvényt
	private void actualUpdate(){
		allOutputWiresShouldUpdate();
	}
	//Az elem belső állapotának értékét állítja be.	
	public void setValue(){
		if(state == 0)
			state = 1;
		else
			state = 0;
	}
	//Az elem belső állapotának értékét adja vissza.	
	public int getState(int nbOfOutput){
		return state;
	}
	
	public void shouldUpdate(){
		shouldUpdate = true;
	}
	
	//No inputWires for Switch
	public void setInputWireNumbers(int nbOfInputWires) throws Exception{
		if(nbOfInputWires != 0)
			throw new Exception("100");
	}
	
	//No inputWires for Switch
	public void setActualInputWire(int nbOfWire,Wire act) throws Exception{
		throw new Exception("100");
	}	
}
